Computer software can provide information to a user. One vehicle for providing information to users is a message, provided to notify the user of some event. The event may be a stock price breaking through a certain threshold, a period of time that has elapsed since a prior event, another user known to the user of the computer system logging into a server or any other event.
When computer software detects the event, some computer software provides a message to the user notifying the user of the event. The manner of notification that the computer software may use may be limited by the environment in which the computer software operates. For example, some operating systems allow the software to request that the operating system display a message box that contains text and one or more buttons allowing the user to communicate information to the program. A communication program can use this capability to request the operating system to display a message upon the occurrence of a loss of communications with a modem, such as “Communications with the modem have unexpectedly terminated. Would you like to reestablish communications with this modem?”. The communication program may also instruct the operating system to display three push buttons, with legends “Yes”, “No” and “Cancel” to allow the user to provide feedback. When the operating system displays the message, it will also display the buttons, and when the user selects one of the buttons, the operating system can inform the program which button was selected upon request by the program.
In the example above, the operating system may enforce a rule that when a message box is displayed, no other user input may be received by the operating system until the user clicks one of the buttons in the message box. Such a message can be annoying to the user, especially a user using an environment that allows multiple programs to be running at the same time. The user may be working on an important task in one program and may not wish to be interrupted by another program.
Additionally, this type of a messaging facility can be inappropriate for many applications that wish to provide messages that may not require immediate attention. Some messages may not require any attention at all, while still other messages may be important enough to simply notify the user of their existence and allow the user to decide whether to view it immediately or, if the user is busy, to wait until a later time. However, many environments do not provide a suitable facility for these types of messages.
If the operating system or other operating environment provides no other messaging facilities suitable for the type of messages to be provided to the user, to provide different types of messages, the developer of each application program is required to write a facility for displaying the type of message desired by the developer, provided the environment in which the program displaying the message can supply the native resources the developer requires to implement the type of message desired. However, even if it is possible for the developer to write a facility that can display the message, the time required to research the manner in which the message can be provided and write the facility may be significant, increasing the cost of providing such a facility or preventing it from being provided. Thus, it is desirable to provide in the environment itself a facility that can provide a variety of different types of messages so that it can be used by several programs.
Even if this problem is solved, other problems with respect to messages remain. One such problem is the fact that messages can annoy the user, particularly if they arise at an inopportune time. Even if the message does not require an immediate response, the user may nevertheless not wish to be interrupted by messages at certain times, but at other times, the user may wish to see the messages. A provision may be made in each program the user is using to disable these kinds of messages, but disabling and reenabling the messages in many different applications can be cumbersome for the user.
If the developers of different programs must write their own messaging facilities, the provision of messages to a user by individual programs can cause confusion and clutter if each program uses a slightly different way of providing messages to the user. If the user is required to interpret and respond to messages from each program in a slightly different manner, the user may get confused when receiving messages from different programs. Furthermore, if messages are displayed in different parts of the screen by different programs, it can cause a cluttered appearance on the screen and take up too much screen space to allow the user to view the messages while working on other application programs.
Some programs are made up of independently or semi-independently running sub-programs. When a triggering event for a message is detected by one of the sub programs or by another facility, it can be desirable to notify some or all of the sub-programs. To perform this function, the developer of the program is required to learn what may be obscure messaging facilities provided by the environment, code their own, or use a combination of existing messaging facilities and coding. This process is time consuming and difficult, and thereby raises the cost of the program or inhibits the developer of the program from implementing such communication at all.
What is needed is a system and method that can provide a facility for messages having different requirements of notification to the user in an environment in which multiple programs can run and therefore can be used by a variety of programs, without requiring the developers of the programs to individually code the facility, that provides a consistent message look and operation across the different programs in the environment without requiring separate areas in which messages from different programs must be displayed, that allows the user a single point of control over the notification process for the messages received, and can provide indications of messages to various component parts of a program.